package editor.cn;

//给定一个直方图(也称柱状图)，假设有人从上面源源不断地倒水，最后直方图能存多少水量?直方图的宽度为 1。 
//
// 
//
// 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图，在这种情况下，可以接 6 个单位的水（蓝色部分表示水）。 感谢 Marco
//s 贡献此图。 
//
// 示例: 
//
// 输入: [0,1,0,2,1,0,1,3,2,1,2,1]
//输出: 6 
// Related Topics 栈 数组 双指针 
// 👍 33 👎 0

public class VolumeOfHistogramLcci{
    public static void main(String[] args) {
        Solution solution = new VolumeOfHistogramLcci().new Solution();
        
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int trap(int[] height) {
        if(height.length<=2){
            return 0;
        }
        int waterSum = 0;
        int lPoint = 1;
        int rPoint = height.length - 2;
        int lMax = height[0];
        int rMax = height[height.length - 1];
        while (lPoint <= rPoint) {
            if (lMax < rMax) {
                lMax = Math.max(lMax, height[lPoint]);
                if (lMax != height[lPoint]) {
                    waterSum += lMax - height[lPoint++];
                } else {
                    lPoint++;
                }
            } else {
                rMax = Math.max(rMax, height[rPoint]);
                if (rMax != height[rPoint]) {
                    waterSum += rMax - height[rPoint--];
                } else {
                    rPoint--;
                }
            }
        }
        return waterSum;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}